bitkeeper revision 1.1236.48.1 (42492ccfJI24fmg8lA7JszDuS59bYA)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 29 Mar 2005 10:24:15 +0000 (10:24 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 29 Mar 2005 10:24:15 +0000 (10:24 +0000)
Get rid of more uses of batched mmu interface.
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c
linux-2.4.29-xen-sparse/include/asm-xen/desc.h
linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h
linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h
linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c
linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c
linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h

index f593714e02c3be97390a90f42fce81841d208769..ada06dd973f6bbd512e2cc0eb4818857f4d2cdda 100644 (file)
@@ -623,7 +623,6 @@ void __init trap_init(void)
     set_call_gate(&default_ldt[0],lcall7);
     set_call_gate(&default_ldt[4],lcall27);
     __make_page_readonly(&default_ldt[0]);
-    flush_page_update_queue();
 
     cpu_init();
 }
index 33309a9671c5ae84f1691f8587962972d1ad6c84..7eaacabf2289e6339a6965ef1b75f2d7886082b2 100644 (file)
@@ -16,15 +16,6 @@ struct Xgt_desc_struct {
 
 extern struct desc_struct default_ldt[];
 
-static inline void clear_LDT(void)
-{
-    /*
-     * NB. We load the default_ldt for lcall7/27 handling on demand, as
-     * it slows down context switching. Noone uses it anyway.
-     */
-    queue_set_ldt(0, 0);
-}
-
 static inline void load_LDT(mm_context_t *pc)
 {
     void *segments = pc->ldt;
@@ -33,7 +24,7 @@ static inline void load_LDT(mm_context_t *pc)
     if ( count == 0 )
         segments = NULL;
     
-    queue_set_ldt((unsigned long)segments, count);               
+    xen_set_ldt((unsigned long)segments, count);               
 }
 
 #endif /* __ASSEMBLY__ */
index 2a0c226c71f6d221730cc83108583e9a96ec93b3..3f8f38877406b39be1e3854e086aed69b8dacdb9 100644 (file)
@@ -79,8 +79,7 @@ static inline pgd_t *get_pgd_slow(void)
                        init_mm.pgd + USER_PTRS_PER_PGD,
                        (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
                __make_page_readonly(pgd);
-               queue_pgd_pin(__pa(pgd));
-               flush_page_update_queue();
+               xen_pgd_pin(__pa(pgd));
        }
        return pgd;
 }
@@ -110,9 +109,8 @@ static inline void free_pgd_slow(pgd_t *pgd)
                free_page((unsigned long)__va(pgd_val(pgd[i])-1));
        kmem_cache_free(pae_pgd_cachep, pgd);
 #else
-       queue_pgd_unpin(__pa(pgd));
+       xen_pgd_unpin(__pa(pgd));
        __make_page_writable(pgd);
-       flush_page_update_queue();
        free_page((unsigned long)pgd);
 #endif
 }
@@ -135,8 +133,7 @@ static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address)
     {
         clear_page(pte);
         __make_page_readonly(pte);
-        queue_pte_pin(__pa(pte));
-        flush_page_update_queue();
+        xen_pte_pin(__pa(pte));
     }
     return pte;
 
@@ -155,9 +152,8 @@ static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm,
 
 static __inline__ void pte_free_slow(pte_t *pte)
 {
-    queue_pte_unpin(__pa(pte));
+    xen_pte_unpin(__pa(pte));
     __make_page_writable(pte);
-    flush_page_update_queue();
     free_page((unsigned long)pte);
 }
 
index f5a53adc82c809a5a5e4210bad59db73b159cc92..19947a9aaebf340efd0cd89aaf332b791cf1e8e0 100644 (file)
@@ -300,7 +300,7 @@ static inline void __make_page_readonly(void *va)
     pgd_t *pgd = pgd_offset_k((unsigned long)va);
     pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
     pte_t *pte = pte_offset(pmd, (unsigned long)va);
-    queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
+    set_pte(pte, pte_wrprotect(*pte));
 }
 
 static inline void __make_page_writable(void *va)
@@ -308,7 +308,7 @@ static inline void __make_page_writable(void *va)
     pgd_t *pgd = pgd_offset_k((unsigned long)va);
     pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
     pte_t *pte = pte_offset(pmd, (unsigned long)va);
-    queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
+    set_pte(pte, pte_mkwrite(*pte));
 }
 
 static inline void make_page_readonly(void *va)
@@ -316,7 +316,7 @@ static inline void make_page_readonly(void *va)
     pgd_t *pgd = pgd_offset_k((unsigned long)va);
     pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
     pte_t *pte = pte_offset(pmd, (unsigned long)va);
-    queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
+    set_pte(pte, pte_wrprotect(*pte));
     if ( (unsigned long)va >= VMALLOC_START )
         __make_page_readonly(machine_to_virt(
             *(unsigned long *)pte&PAGE_MASK));
@@ -327,7 +327,7 @@ static inline void make_page_writable(void *va)
     pgd_t *pgd = pgd_offset_k((unsigned long)va);
     pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
     pte_t *pte = pte_offset(pmd, (unsigned long)va);
-    queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
+    set_pte(pte, pte_mkwrite(*pte));
     if ( (unsigned long)va >= VMALLOC_START )
         __make_page_writable(machine_to_virt(
             *(unsigned long *)pte&PAGE_MASK));
index f27dc20c7f139814414e2a010bd239bb2a0f9e3e..fa9aac890ed4cbe2b8b56f5c3e8349e6c93de6c9 100644 (file)
@@ -355,11 +355,12 @@ static void __init pagetable_init (void)
         */
        memcpy(new_pgd, old_pgd, PTRS_PER_PGD_NO_HV*sizeof(pgd_t));
        make_page_readonly(new_pgd);
-       queue_pgd_pin(__pa(new_pgd));
+       xen_pgd_pin(__pa(new_pgd));
        load_cr3(new_pgd);
-       queue_pgd_unpin(__pa(old_pgd));
+       flush_page_update_queue();
+       xen_pgd_unpin(__pa(old_pgd));
        make_page_writable(old_pgd);
-       __flush_tlb_all(); /* implicit flush */
+       __flush_tlb_all();
        free_bootmem(__pa(old_pgd), PAGE_SIZE);
 
        kernel_physical_mapping_init(new_pgd);
index 2682ac5b9056f426968c9a347fb1c87bc8fcdbb3..15ad452eb42395be6a62130d94b218c646bd92d5 100644 (file)
@@ -193,10 +193,8 @@ void __set_fixmap_ma (enum fixed_addresses idx, unsigned long phys, pgprot_t fla
 pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 {
        pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
-       if (pte) {
+       if (pte)
                make_page_readonly(pte);
-               flush_page_update_queue();
-       }
        return pte;
 }
 
@@ -208,8 +206,7 @@ void pte_ctor(void *pte, kmem_cache_t *cache, unsigned long unused)
 
        clear_page(pte);
        make_page_readonly(pte);
-       queue_pte_pin(__pa(pte));
-       flush_page_update_queue();
+       xen_pte_pin(__pa(pte));
 }
 
 void pte_dtor(void *pte, kmem_cache_t *cache, unsigned long unused)
@@ -217,9 +214,8 @@ void pte_dtor(void *pte, kmem_cache_t *cache, unsigned long unused)
        struct page *page = virt_to_page(pte);
        ClearPageForeign(page);
 
-       queue_pte_unpin(__pa(pte));
+       xen_pte_unpin(__pa(pte));
        make_page_writable(pte);
-       flush_page_update_queue();
 }
 
 struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
@@ -316,8 +312,7 @@ void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused)
        memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t));
  out:
        make_page_readonly(pgd);
-       queue_pgd_pin(__pa(pgd));
-       flush_page_update_queue();
+       xen_pgd_pin(__pa(pgd));
 }
 
 /* never called when PTRS_PER_PMD > 1 */
@@ -325,9 +320,8 @@ void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused)
 {
        unsigned long flags; /* can be called from interrupt context */
 
-       queue_pgd_unpin(__pa(pgd));
+       xen_pgd_unpin(__pa(pgd));
        make_page_writable(pgd);
-       flush_page_update_queue();
 
        if (PTRS_PER_PMD > 1)
                return;
@@ -378,7 +372,7 @@ void make_lowmem_page_readonly(void *va)
        pud_t *pud = pud_offset(pgd, (unsigned long)va);
        pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
        pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
-       queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
+       set_pte(pte, pte_wrprotect(*pte));
 }
 
 void make_lowmem_page_writable(void *va)
@@ -387,7 +381,7 @@ void make_lowmem_page_writable(void *va)
        pud_t *pud = pud_offset(pgd, (unsigned long)va);
        pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
        pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
-       queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
+       set_pte(pte, pte_mkwrite(*pte));
 }
 
 void make_page_readonly(void *va)
@@ -396,7 +390,7 @@ void make_page_readonly(void *va)
        pud_t *pud = pud_offset(pgd, (unsigned long)va);
        pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
        pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
-       queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
+       set_pte(pte, pte_wrprotect(*pte));
        if ( (unsigned long)va >= (unsigned long)high_memory )
        {
                unsigned long phys;
@@ -414,7 +408,7 @@ void make_page_writable(void *va)
        pud_t *pud = pud_offset(pgd, (unsigned long)va);
        pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
        pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
-       queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
+       set_pte(pte, pte_mkwrite(*pte));
        if ( (unsigned long)va >= (unsigned long)high_memory )
        {
                unsigned long phys;
index d35d1c00e3938994ff7abf1ae510debe73dd5177..33ded533b246d16321d87ae7bd8c947dec4adcb4 100644 (file)
@@ -16,8 +16,6 @@
 #define set_pte(pteptr, pteval) (*(pteptr) = pteval)
 #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
 #define set_pmd(pmdptr, pmdval) xen_l2_entry_update((pmdptr), (pmdval))
-#define set_pte_batched(pteptr, pteval) \
-       queue_l1_entry_update(pteptr, (pteval).pte_low)
 
 #define ptep_get_and_clear(xp) __pte_ma(xchg(&(xp)->pte_low, 0))
 #define pte_same(a, b)         ((a).pte_low == (b).pte_low)